package SingletonPattern;

/**
 * 6.静态内部类单例模式
 * <p>
 * 使用了以下两个JVM机制：
 * 1.类装载时，其静态内部类不会被装载
 * 2.类装载时，是线程安全的
 * （优点：效率高；线程安全；懒加载：调用getInstance时静态内部类装载）
 */
public class StaticInnerClassSingleton {
    // 1.私有化构造函数
    private StaticInnerClassSingleton() {
    }

    // 2.静态内部类（含有一个静态变量为StaticInnerClassSingleton类的对象）
    private static class SingletonInstance {
        private static final StaticInnerClassSingleton INSTANCE
                = new StaticInnerClassSingleton();
    }

    // 3.对外暴露获取实例的静态方法
    public static StaticInnerClassSingleton getInstance() {
        return SingletonInstance.INSTANCE;
    }

}
